
package  main

import (
	"fmt"
	"sync"
)

func test1(){
	//for range 的value注意
	arr := []int{0,1,2,3}
	arrMap := make(map[int]*int)
	for key, val := range arr {
		arrMap[key] = &val
	}
	for k, v := range arrMap {
		//这是新手常会犯的错误写法，for range 循环的时候会创建每个元素的副本，
		//而不是元素的引用，所以 m[key] = &val 取的都是变量 val 的地址，
		//所以最后 map 中的所有元素的值都是变量 val 的地址，因为最后 val 被赋值为3，所有输出都是3.
		fmt.Println("k, v = ", k, *v)
	}
	fmt.Println("====================")
}

func test2(){
	//for range 的value注意
	arr := []int{0,1,2,3}
	arrMap := make(map[int]*int)
	for key, val := range arr {
		v := val
		arrMap[key] = &v
	}
	//map range 是无序的
	for k, v := range arrMap {
		//这是新手常会犯的错误写法，for range 循环的时候会创建每个元素的副本，
		//而不是元素的引用，所以 m[key] = &val 取的都是变量 val 的地址，
		//所以最后 map 中的所有元素的值都是变量 val 的地址，因为最后 val 被赋值为3，所有输出都是3.
		fmt.Println("k, v = ", k, *v)
	}

}

func test3(){
	//return
	fmt.Println("______test3__")

}

func main() {
	//fmt.Sprintf的使用
	var str string
	str = fmt.Sprintf("GameUrl%d", 33)
	fmt.Println(str)

	test1()
	test2()

	test3()

	var mp sync.Map
	mp.Store("key", 100)
	mp.Store("key", 101)

	mp.Range(func(key interface{}, value interface{}) bool{
		fmt.Println(key, value)
		return true
	})
	fmt.Println(mp)

}
